/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package sys.dao;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import sys.bean.CidadeBean;
import sys.bean.ClienteBean;
import sys.bean.EstadoBean;
import sys.utils.ConexaoADS;
import sys.utils.ConexaoMySql;
import sys.utils.Utils;
import static sys.utils.Utils.dataCorreta;

/**
 *
 * @author Cesar Daniel
 */
public class ClienteDao {

    /*
     INICIO CONCRETEIRA
     */
    public ClienteBean getCliente(int idCliente) throws SQLException {

        Connection con = ConexaoMySql.getConection();

        String sql = "SELECT c.id_cliente, c.nome, c.endereco, c.n_endereco, c.bairro, UPPER(cid.nome) AS nome_cidade, UPPER(et.nome) AS nome_estado, et.uf \n"
                + "FROM cliente c \n"
                + "INNER JOIN cidade cid ON (cid.id = c.cidade_id) \n"
                + "INNER JOIN estado et ON (et.id = cid.estado_id) \n"
                + "WHERE c.id_cliente = " + idCliente;

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();

        ClienteBean cliente = new ClienteBean();
        CidadeBean cidade = new CidadeBean();
        EstadoBean estado = new EstadoBean();

        while (rs.next()) {

            cliente.setCodigo(idCliente + "");
            cliente.setNome(rs.getString("nome"));

            cliente.setEndereco(rs.getString("endereco"));
            cliente.setnEndereco(rs.getString("n_endereco"));
            cliente.setBairro(rs.getString("bairro"));

            estado.setNome(rs.getString("nome_estado"));
            estado.setUf(rs.getString("uf"));
            cidade.setEstado(estado);
            cidade.setNome(rs.getString("nome_cidade"));

            cliente.setCidade(cidade);
        }

        stmt.close();
        con.close();

        return cliente;

    }

    public void updateClienMySql(String codCliente) throws SQLException, IOException {
        ClienteBean cliente = consultaCliente(codCliente);

        Connection con = ConexaoMySql.getConection();

        String sql = "UPDATE cliente SET \n"
                + "cidade_id = ?, nome = ?, complemento_nome = ?, cpf_cnpj = ?, rg_ie = ?, endereco = ?, n_endereco = ?, bairro = ?, cep = ?, fone = ?, celular = ?, tipo_pessoa = ? "
                + "WHERE id_cliente = ?";

        PreparedStatement stmt = con.prepareStatement(sql);

        stmt.setInt(1, cliente.getCidade().getIdCidage());
        stmt.setString(2, cliente.getNome().replace("�", " "));
        stmt.setString(3, cliente.getComplementoNome().replace("�", " "));
        stmt.setString(4, cliente.getCpfCnpj());
        stmt.setString(5, cliente.getRgIe());
        stmt.setString(6, cliente.getEndereco().replace("�", " "));
        stmt.setString(7, cliente.getnEndereco());
        stmt.setString(8, cliente.getBairro().replace("�", " "));
        stmt.setString(9, cliente.getCep());
        stmt.setString(10, cliente.getFone());
        stmt.setString(11, cliente.getFone1());
        stmt.setString(12, cliente.getTipo());
        stmt.setInt(13, Integer.parseInt(codCliente));

        stmt.execute();

        stmt.close();
        con.close();
    }

    public void insertClienMySql(String codCliente) throws SQLException, IOException {
        
        ClienteBean cliente = consultaCliente(codCliente);

        Connection con = ConexaoMySql.getConection();

        String sql = "INSERT INTO \n"
                + "cliente (id_cliente, cidade_id, nome, complemento_nome, cpf_cnpj, rg_ie, endereco, n_endereco, bairro, cep, fone, celular, tipo_pessoa) \n"
                + "VALUES \n"
                + "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);";

        PreparedStatement stmt = con.prepareStatement(sql);

        stmt.setInt(1, Integer.parseInt(codCliente));
        stmt.setInt(2, cliente.getCidade().getIdCidage());
        stmt.setString(3, cliente.getNome().replace("�", " "));
        stmt.setString(4, cliente.getComplementoNome().replace("�", " "));
        stmt.setString(5, cliente.getCpfCnpj());
        stmt.setString(6, cliente.getRgIe());
        stmt.setString(7, cliente.getEndereco().replace("�", " "));
        stmt.setString(8, cliente.getnEndereco());
        stmt.setString(9, cliente.getBairro().replace("�", " "));
        stmt.setString(10, cliente.getCep());
        stmt.setString(11, cliente.getFone());
        stmt.setString(12, cliente.getFone1());
        stmt.setString(13, cliente.getTipo());

        stmt.execute();

        stmt.close();
        con.close();
    }
    /*
     FIM CONCRETEIRA
     */

    public static List<ClienteBean> getListaClientes(String txConsulta) throws SQLException, IOException {
        List<ClienteBean> listaClientes = new ArrayList<>();
        Connection con = ConexaoADS.getConection();

        String sql = "SELECT C05CODIGO, C05NOME, C05DDD, C05FONE, C05CIDADE, C05CPFCGC, C05RGINSC, C05TIPO, C05SITU FROM SPAC05 " + txConsulta;

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {

            ClienteBean cliente = new ClienteBean();

            cliente.setCodigo(rs.getString("C05CODIGO"));
            cliente.setNome(rs.getString("C05NOME"));
            cliente.setFone(rs.getString("C05FONE"));
            cliente.setDddFone(rs.getString("C05DDD"));
            cliente.setDescCidade(rs.getString("C05CIDADE"));
            cliente.setCpfCnpj(rs.getString("C05CPFCGC"));
            cliente.setRgIe(rs.getString("C05RGINSC"));
            cliente.setTipo(rs.getString("C05TIPO"));
            cliente.setSituacao(rs.getString("C05SITU"));

            listaClientes.add(cliente);
        }

        stmt.close();
        con.close();

        return listaClientes;
    }

    //Retornando dados do cliente selecionado
    public static ClienteBean consultaCliente(String idCliente) throws SQLException, IOException {

        Connection con = ConexaoADS.getConection();

        String sql = "SELECT C05CODMUN, C05NOME, C05FANTAS, C05TIPO, C05SEXO, C05DDD, C05FONE, C05DDDTR, C05FONTR, C05DDD1, C05FON1, C05DDDCJ, C05FONECJ, C05DDDN, C05FONEN, \n"
                + "	C05DTCAD, C05ENDER, C05ENDNR, C05BAIRRO, C05CEP, C05CIDADE, C05ESTADO, C05QTDCPRA, C05LIMCRE, C05LOCAL, C05FUNCAO, C05RENDA, C05OBS, C05CPFCGC, C05RGINSC, C05DTULT, C05SITU \n"
                + "	FROM SPAC05 \n"
                + "	WHERE \n"
                + "	C05CODIGO = '" + idCliente + "'";

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();

        ClienteBean cliente = new ClienteBean();

        while (rs.next()) {

            cliente.setCodigo(idCliente + "");
            cliente.setNome(rs.getString("C05NOME"));
            cliente.setComplementoNome(rs.getString("C05FANTAS"));

            cliente.setSituacao(rs.getString("C05SITU"));

            cliente.setTipo(rs.getString("C05TIPO"));
            cliente.setCpfCnpj(Utils.cpfCnpjCorreto(rs.getString("C05CPFCGC")));
            cliente.setRgIe(rs.getString("C05RGINSC"));

            cliente.setSexo(rs.getString("C05SEXO"));

            cliente.setFone(Utils.foneCorreto(rs.getString("C05DDD"), rs.getString("C05FONE")));
            cliente.setFoneTrabalho(Utils.foneCorreto(rs.getString("C05DDDTR"), rs.getString("C05FONTR")));
            cliente.setFone1(Utils.foneCorreto(rs.getString("C05DDD1"), rs.getString("C05FON1")));
            cliente.setFoneCJ(Utils.foneCorreto(rs.getString("C05DDDCJ"), rs.getString("C05FONECJ")));

            cliente.setDataCadastro(dataCorreta(rs.getString("C05DTCAD")));
            cliente.setEndereco(rs.getString("C05ENDER"));
            cliente.setnEndereco(rs.getString("C05ENDNR"));
            cliente.setBairro(rs.getString("C05BAIRRO"));
            cliente.setCep(rs.getString("C05CEP"));

            CidadeBean cidade = new CidadeBean();

            String codMunicipio = rs.getString("C05CODMUN");

            if (codMunicipio.equals("")) {
                cidade.setIdCidage(2080);
                cliente.setCidade(cidade);
            } else {
                cidade.setIdCidage(idCidade(Integer.parseInt(codMunicipio)));
                cliente.setCidade(cidade);
            }

            cliente.setDescCidade(rs.getString("C05CIDADE"));
            cliente.setEstado(rs.getString("C05ESTADO"));
            cliente.setQtdCompra(rs.getInt("C05QTDCPRA"));
            cliente.setLimCredito(rs.getDouble("C05LIMCRE"));
            cliente.setLocalTrabalho(rs.getString("C05LOCAL"));
            cliente.setFuncao(rs.getString("C05FUNCAO"));
            cliente.setRenda(rs.getDouble("C05RENDA"));
            cliente.setObs(rs.getString("C05OBS"));
            cliente.setDataUltCompra(dataCorreta(rs.getString("C05DTULT")));
            cliente.setQtdCompra(rs.getInt("C05QTDCPRA"));

        }

        stmt.close();
        con.close();

        return cliente;
    }

    /*
     retornando codigo da cidade através do codigo do municipio no IBGE
     */
    public static int idCidade(int codMunicipio) throws SQLException, IOException {
        int id = 0;

        Connection con = ConexaoMySql.getConection();

        String sql = "SELECT c.id AS CODIGO \n"
                + "FROM cidade c\n"
                + "WHERE c.cod_municipio = " + codMunicipio;

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {

            id = rs.getInt("CODIGO");

        }

        stmt.close();
        con.close();

        return id;
    }

}
